package moduloRemoto.pojo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name="Projeto")
public class Projeto implements Serializable
{
	@Transient
	private static final long serialVersionUID = 1L;

	@Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable=false, columnDefinition="INT(4)")
    private int idPro;
	
	@Column(nullable=true, columnDefinition="VARCHAR(16)")
    private String codigoPro;
	
	@Column(nullable=false, columnDefinition="VARCHAR(180)")
    private String tituloPro;
	
	@Column(nullable=true, columnDefinition="VARCHAR(255)")
	private String descricaoPro;
	
	@Column(nullable=true, columnDefinition="VARCHAR(130)")
    private String clientePro;
	
	@Column(nullable=true, columnDefinition="DATE")
	@Temporal(value = TemporalType.DATE)
	private Date dataInicialPro;

	@Column(nullable=true, columnDefinition="DATE")
	@Temporal(value = TemporalType.DATE)
	private Date dataFinalPrevPro;

	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "listaProjetos")
	private List<Colaborador> listaColaboradores = new ArrayList<Colaborador>(0);
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "projetoTar")
	private List<Tarefa> listaTarefas = new ArrayList<Tarefa>(0);
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "projetoDoc")
	private List<Documento> listaDocumentos = new ArrayList<Documento>(0);

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "projetoAvi")
	private List<Aviso> listaAvisos = new ArrayList<Aviso>(0);
	
	
	// Construtor
	public Projeto()
	{	
	}


	// Getters and Setters
	public final int getIdPro()
	{
		return idPro;
	}

	public final void setIdPro(int idPro)
	{
		this.idPro = idPro;
	}

	public final String getCodigoPro()
	{
		return codigoPro;
	}

	public final void setCodigoPro(String codigoPro)
	{
		this.codigoPro = codigoPro;
	}

	public final String getTituloPro()
	{
		return tituloPro;
	}

	public final void setTituloPro(String tituloPro)
	{
		this.tituloPro = tituloPro;
	}

	public final String getDescricaoPro()
	{
		return descricaoPro;
	}

	public final void setDescricaoPro(String descricaoPro)
	{
		this.descricaoPro = descricaoPro;
	}

	public final String getClientePro()
	{
		return clientePro;
	}

	public final void setClientePro(String clientePro)
	{
		this.clientePro = clientePro;
	}

	public final Date getDataInicialPro()
	{
		return dataInicialPro;
	}

	public final void setDataInicialPro(Date dataInicialPro)
	{
		this.dataInicialPro = dataInicialPro;
	}

	public final Date getDataFinalPrevPro()
	{
		return dataFinalPrevPro;
	}

	public final void setDataFinalPrevPro(Date dataFinalPrevPro)
	{
		this.dataFinalPrevPro = dataFinalPrevPro;
	}
	
	public final void setColaboradores(List<Colaborador> listaColaboradores)
	{
		this.listaColaboradores = listaColaboradores;
	}
	
	public final List<Colaborador> getColaboradores()
	{
		return listaColaboradores;
	}
	
	public final List<Tarefa> getListaTarefas()
	{
		return listaTarefas;
	}

	public final void setListaTarefas(List<Tarefa> listaTarefas)
	{
		this.listaTarefas = listaTarefas;
	}

	public final List<Documento> getDocumentos()
	{
		return listaDocumentos;
	}
	
	public final List<Aviso> getAvisos()
	{
		return listaAvisos;
	}
}